import java.util.Date;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;

import model.Atendente;
import model.Emprestimo;
import model.Livro;
import model.Usuario;
import dao.remote.AtendenteDAORemote;
import dao.remote.EmprestimoDAORemote;
import dao.remote.LivroDAORemote;
import dao.remote.UsuarioDAORemote;

@Startup
@Singleton
public class Prova {

	@EJB
	private AtendenteDAORemote atendenteDAO;
	@EJB
	private LivroDAORemote livroDAO;
	@EJB
	private UsuarioDAORemote usuarioDAO;
	@EJB
	private EmprestimoDAORemote emprestimoDAO;

	public Prova() {
	}

	@PostConstruct
	private void popularBanco() {

		popularUsuario();
		popularLivro();
		popularAtendente();
		popularEmprestimo();

	}

	@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
	private void popularLivro() {
		Livro livro1 = new Livro("Livro1", 2014, "Novatec", "Autor1", true);
		Livro livro2 = new Livro("Livro2", 2014, "Novatec", "Autor2", true);
		Livro livro3 = new Livro("Livro3", 2014, "Novatec", "Autor3", true);
		Livro livro4 = new Livro("Livro4", 2014, "Novatec", "Autor4", true);

		livroDAO.salvar(livro1);
		livroDAO.salvar(livro2);
		livroDAO.salvar(livro3);
		livroDAO.salvar(livro4);
	}

	@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
	private void popularUsuario() {
		Usuario usuario1 = new Usuario("1", "Usuario1", "1", "Email1",
				"Telefone1");
		Usuario usuario2 = new Usuario("2", "Usuario2", "2", "Email2",
				"Telefone2");
		Usuario usuario3 = new Usuario("3", "Usuario3", "3", "Email3",
				"Telefone3");

		usuarioDAO.salvar(usuario1);
		usuarioDAO.salvar(usuario2);
		usuarioDAO.salvar(usuario3);
	}

	@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
	private void popularAtendente() {
		Atendente atendente = new Atendente("Atendente", "1", "email", "login",
				"senha");

		atendenteDAO.salvar(atendente);
	}
	
	@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
	private void popularEmprestimo(){
		Atendente atendente = atendenteDAO.buscar("login", "senha");
		
		Emprestimo emprestimo1 = new Emprestimo(livroDAO.buscar(1), usuarioDAO.buscar("1"), atendente,
				new Date());
		Emprestimo emprestimo2 = new Emprestimo(livroDAO.buscar(2), usuarioDAO.buscar("1"), atendente,
				new Date());
		Emprestimo emprestimo3 = new Emprestimo(livroDAO.buscar(3), usuarioDAO.buscar("2"), atendente,
				new Date());
		Emprestimo emprestimo4 = new Emprestimo(livroDAO.buscar(4), usuarioDAO.buscar("3"), atendente,
				new Date());

		emprestimoDAO.salvar(emprestimo1);
		emprestimoDAO.salvar(emprestimo2);
		emprestimoDAO.salvar(emprestimo3);
		emprestimoDAO.salvar(emprestimo4);
	}

}
